﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Follow.Business;
using System.Windows.Forms;

namespace Follow.Cadastros
{   
    public partial class Equipe : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["idUsuario"] == null)
            {
                Response.Redirect("../Default.aspx");
            }
            else
            {
                Common.ValidaPermissoes valida = new Common.ValidaPermissoes();
                bool possuiPermissao = valida.validaPermissaoPorTela("Equipe", Convert.ToInt32(Session["idGrupoUsuario"]));

                if (possuiPermissao == false)
                {
                    Response.Redirect("../permissaoNegada.aspx");
                }

                if (Request["Msg"] != null)
                {
                    divMsg1.Visible = true;
                    divMsg1.Attributes["class"] = "isa_info";
                    lblMsg1.Text = Request["Msg"].ToString();

                }
                this.PopulaEquipes();
            }
        }

        private void PopulaEquipes()
        {
            EquipeBO bo = new EquipeBO();
            gvEquipe.DataSource = bo.findByNome(txtPesquisa.Text);
            gvEquipe.DataBind();
        }

        private void PopulaGestores()
        {
            FuncionarioBO bo = new FuncionarioBO();
            ddlGestor.DataSource = bo.findByGestores();
            ddlGestor.DataValueField = "idfuncionario";
            ddlGestor.DataTextField = "nome";
            ddlGestor.DataBind();
        }


        private void PopulaFuncionarios(int idEquipe)
        {
            if (idEquipe == 0)
            {
                FuncionarioBO bo = new FuncionarioBO();
                cblFuncionarios.DataSource = bo.findByNaoGestores();
                cblFuncionarios.DataTextField = "nome";
                cblFuncionarios.DataValueField = "idfuncionario";
                cblFuncionarios.DataBind();
            }
            else
            {

                IList<Model.EquipeFuncionario> ef = new List<Model.EquipeFuncionario>();
                EquipeFuncionarioBO bo = new EquipeFuncionarioBO();
                ef = bo.findByEquipe(idEquipe);

                FuncionarioBO bo2 = new FuncionarioBO();
                cblFuncionarios.DataSource = bo2.findByNaoGestores();
                cblFuncionarios.DataTextField = "nome";
                cblFuncionarios.DataValueField = "idfuncionario";
                cblFuncionarios.DataBind();

                foreach (Model.EquipeFuncionario equipeFuncionario in ef)
                {
                    for (int i = 0; i < cblFuncionarios.Items.Count; i++)
                    {
                        if (equipeFuncionario.IDFuncionario == Convert.ToInt32(cblFuncionarios.Items[i].Value))
                        {
                            cblFuncionarios.Items[i].Selected = true;
                        }
                    }
                }
            }
        }

        protected void btnPesquisa_Click(object sender, EventArgs e)
        {
            this.PopulaEquipes();
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            mvEquipe.ActiveViewIndex = 1;
            divMsg2.Visible = false;
            Title = "Incluir Equipe";
            IDEquipe.Value = "";
            txtNome.Text = "";
            PopulaGestores();
            PopulaFuncionarios(0);
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            IList<Model.Equipe> EquipeLista = new List<Model.Equipe>();
            Model.Equipe equipe = new Model.Equipe();
            try
            {

                EquipeBO bo = new EquipeBO();
                if (IDEquipe.Value != "")
                {
                    equipe.IDEquipe = Int32.Parse(IDEquipe.Value);
                }
                equipe.Nome = txtNome.Text;
                EquipeLista = bo.save(equipe, Convert.ToInt32(Session["idUsuario"]));
                int idEquipe = 0;
                foreach (Model.Equipe eq in EquipeLista)
                {
                    idEquipe = eq.IDEquipe;
                }

                Model.EquipeFuncionario gestor = new Model.EquipeFuncionario();

                gestor.IDEquipe = idEquipe;
                gestor.IDFuncionario = Convert.ToInt32(ddlGestor.SelectedValue);
                gestor.Gestor = true;

                EquipeFuncionarioBO boGestor = new EquipeFuncionarioBO();

                boGestor.insert(gestor);

                for (int i = 0; i < cblFuncionarios.Items.Count; i++)
                {
                    if (cblFuncionarios.Items[i].Selected)
                    {
                        Model.EquipeFuncionario equipeFuncionario = new Model.EquipeFuncionario();
                                              
                        equipeFuncionario.IDEquipe = idEquipe;
                        equipeFuncionario.IDFuncionario = Convert.ToInt32(cblFuncionarios.Items[i].Value);
                        equipeFuncionario.Gestor = false;

                        EquipeFuncionarioBO boEquipeFuncionario = new EquipeFuncionarioBO();

                        boEquipeFuncionario.insert(equipeFuncionario);
                    }
                }

                divMsg1.Visible = true;
                divMsg1.Attributes["class"] = "isa_success";
                lblMsg1.Text = "Equipe salva com sucesso!";
                mvEquipe.ActiveViewIndex = 0;
                PopulaEquipes();

            }
            catch (Exception ex)
            {
                divMsg2.Visible = true;                    
                if (ex.Message.IndexOf("duplicate") > -1)
                {
                    divMsg2.Attributes["class"] = "isa_warning"; 
                    lblMsg2.Text = "Equipe já cadastrada no sistema";
                }
                else
                {
                    divMsg2.Attributes["class"] = "isa_error";
                    lblMsg2.Text = ex.Message;
                }
            }
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            mvEquipe.ActiveViewIndex = 0;
        }

        protected void gvEquipe_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Editar"))
            {
                Int32 id = Convert.ToInt32(this.gvEquipe.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                //Response.Redirect("~/Adm/Gruopo.aspx?IDGrupo=" + id.ToString());

                if (id != null)
                {
                    if (id > 0)
                    {
                        EquipeFuncionarioBO bo2 = new EquipeFuncionarioBO();
                        Model.EquipeFuncionario Equipe2 = bo2.findByEquipeAndGestor(id);
                        ddlGestor.SelectedValue = Equipe2.IDFuncionario.ToString();
                        IDEquipeFuncionario.Value = Equipe2.IDEquipeFuncionario.ToString();
                        
                        EquipeBO bo = new EquipeBO();
                        Model.Equipe Equipe = bo.load(id);
                        txtNome.Text = Equipe.Nome;
                        IDEquipe.Value = Equipe.IDEquipe.ToString();
           

                        Title = "Alterar Equipe";

                        PopulaFuncionarios(Equipe.IDEquipe);
                        PopulaGestores();
                        divMsg2.Visible = false;
                        mvEquipe.ActiveViewIndex = 1;
                    }
                }


            }
            else if (e.CommandName.Equals("Excluir"))
            {
                if (System.Windows.Forms.MessageBox.Show("Tem certeza que deseja excluir?", "Excluir", MessageBoxButtons.OKCancel,
                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) ==
                    System.Windows.Forms.DialogResult.OK)
                {
                    divMsg1.Visible = true;
                    Int32 id = 0;
                    try
                    {
                        id = Convert.ToInt32(this.gvEquipe.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    }
                    catch (Exception ex)
                    {
                        divMsg2.Attributes["class"] = "isa_error";
                        lblMsg2.Text = "Erro ao excluír: " + ex.Message;
                        return;
                    }
                    EquipeBO bo = new EquipeBO();
                    try
                    {
                        bo.delete(id, Convert.ToInt32(Session["idUsuario"]));
                        divMsg1.Attributes["class"] = "isa_success";
                        lblMsg1.Text = "Equipe excluída com sucesso!";
                        this.PopulaEquipes();
                    }
                    catch (Exception ex)
                    {
                        divMsg2.Attributes["class"] = "isa_error";
                        lblMsg2.Text = "Erro ao excluír: " + ex.Message;
                    }
                }
            }
        }


        protected void gvEquipe_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvEquipe.PageIndex = e.NewPageIndex;
            this.PopulaEquipes();
        }

        protected void gvEquipe_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

    }
     
}